package com.xy.project.base;

import com.xy.etl.ds.SQResult;
import com.xy.etl.ds.model.DataSourceConfig;
import com.xy.etl.kit.EtlDao;
import lombok.extern.slf4j.Slf4j;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 数据相关操作
 */
@Slf4j
public class EtlDaoProxy {


    /**
     * 执行
     *
     * @return
     * @throws Exception
     */
    public static void run(String sql, DataSourceConfig config) throws Exception {
        EtlDao.run(new SQResult(sql), config);
    }

    /**
     * 查询
     *
     * @return
     * @throws Exception
     */
    public static List<Map<String, Object>> list(String sql, DataSourceConfig config) throws Exception {
        return EtlDao.list(new SQResult(sql), config);
    }

    /**
     * 取得单元格
     *
     * @param sql
     * @param config
     * @throws Exception
     */
    public static Object get(String sql, DataSourceConfig config) throws Exception {
        List<Map<String, Object>> dataList = EtlDao.list(new SQResult(sql), config);
        if (dataList != null && dataList.size() > 0) {
            for (Object value : dataList.get(0).values()) {
                return value;
            }
        }
        return null;
    }

    /**
     * 取得单元格
     *
     * @param sql
     * @param config
     * @throws Exception
     */
    public static Object get(SQResult sql, DataSourceConfig config) throws Exception {
        List<Map<String, Object>> dataList = EtlDao.list(sql, config);
        if (dataList != null && dataList.size() > 0) {
            for (Object value : dataList.get(0).values()) {
                return value;
            }
        }
        return null;
    }

    /**
     * 取得单元格
     *
     * @param sql
     * @param config
     * @param defaultValue
     * @return
     * @throws Exception
     */
    public static Date getDate(String sql, DataSourceConfig config, Date defaultValue) throws Exception {
        Date value = MyUtil.toDate(get(sql, config));
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    /**
     * 取得单元格
     *
     * @param sql
     * @param config
     * @param defaultValue
     * @return
     * @throws Exception
     */
    public static Date getDate(SQResult sql, DataSourceConfig config, Date defaultValue) throws Exception {
        Date value = MyUtil.toDate(get(sql, config));
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    /**
     * 取得单元格
     *
     * @param sql
     * @param config
     * @param defaultValue
     * @return
     * @throws Exception
     */
    public static Date getDateTime(String sql, DataSourceConfig config, Date defaultValue) throws Exception {
        Date value = MyUtil.toDatetime(get(sql, config));
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    /**
     * 取得单元格
     *
     * @param sql
     * @param config
     * @param defaultValue
     * @return
     * @throws Exception
     */
    public static Date getDateTime(SQResult sql, DataSourceConfig config, Date defaultValue) throws Exception {
        Date value = MyUtil.toDatetime(get(sql, config));
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    /**
     * 取得单元格
     *
     * @param sql
     * @param config
     * @param defaultValue
     * @return
     * @throws Exception
     */
    public static Long getLong(String sql, DataSourceConfig config, Long defaultValue) throws Exception {
        Long value = MyUtil.toLong(get(sql, config));
        if (value == null) {
            return defaultValue;
        }
        return value;
    }

    /**
     * 取得单元格
     *
     * @param sql
     * @param config
     * @param defaultValue
     * @return
     * @throws Exception
     */
    public static Long getLong(SQResult sql, DataSourceConfig config, Long defaultValue) throws Exception {
        Long value = MyUtil.toLong(get(sql, config));
        if (value == null) {
            return defaultValue;
        }
        return value;
    }
}
